<?php
class WebhostingController extends AppController {
    public $helpers = array('Html', 'Form','Session');
    public $components = array('Session','Auth');
    public $uses=array('Webhosting','User','Order','Publicpage','Notification');
    public $scaffold = 'admin';
    public function index(){
      $userid= $this->Auth->User('id');
      $webhosting=$this->Webhosting->findByUserid($userid);
      $webhosting['Webhosting']['password']=AppController::DecryptPassword($webhosting['Webhosting']['password']);
      $this->set('row', $webhosting['Webhosting']);
      $user_data=$this->User->findById($userid);
      $user_login=$user_data['User']['login'];
      $this->set('user_login', $user_login);
    }
    public function add(){
      $userid= $this->Auth->User('id');
      if ($this->request->is('post')) {
        $webhosting = $this->Webhosting->findByUserid($userid);
        if (!$webhosting) {
          $this->request->data['Webhosting']['userid']=$userid;
          $serverip="radioheart.ru";
          $this->request->data['Webhosting']['serverip']=$serverip;
          $this->request->data['Webhosting']['password']=AppController::EncryptPassword($this->request->data['Webhosting']['apassword']);
          unset($this->request->data['Webhosting']['apassword']);
          $this->Webhosting->create();
          if ($this->Webhosting->save($this->request->data)) {
            //Отправить мне на мыло, что пришел новый заказ на экстре
            $headers= "MIME-Version: 1.0\r\n";
            $headers .= "Content-type: text/html; charset=utf-8\r\n";
            $headers.="From: extra@radioheart.ru\r\n";
            $message="Новый заказ web-хостинга!";
            mail("germes.07@bk.ru", "RadioHeart - качественный радио хостинг",$message,$headers);
            $user_data=$this->User->findById($userid);
            $user_email=$user_data['User']['email'];
            $message="Мы получили Ваш заказ на виртуальный хостинг и готовы активировать Ваш аккаунт. Для того, чтобы получить первый месяц пользования хостингом
                      абсолютно бесплатно, вам следует обратиться в тикеты с соответствующей просьбой.";
            //mail($user_email, "RadioHeart - заказ радио хостинга",$message,$headers);
            $tmp=AppController::send_email($user_email, "RadioHeart - заказ виртуального хостинга",$message,$headers);

            $this->Session->setFlash(__('The weborder has been saved'));
            $this->redirect(array('action' => 'index'));
          }
        }
        else
        {
          $this->Session->setFlash(__('You already have webhosting'));
          $this->redirect(array('action' => 'index'));
        }
      }
    }
    public function pay($orderid=null){
      $userid= $this->Auth->User('id');
      if (!$orderid) {
            throw new NotFoundException(__('Invalid order id'));
      }
      $webhosting = $this->Webhosting->findById($orderid);
      $cost=$webhosting['Webhosting']['cost']; //Стоимость заказа в USD
      $opl=$webhosting['Webhosting']['oplachenodo'];
      $status=$webhosting['Webhosting']['status'];
      $tarif=$webhosting['Webhosting']['tarif'];
      $password= $webhosting['Webhosting']['password'];
      $user_data=$this->User->findById($userid);
      $login=$user_data['User']['login'];
      $user_email=$user_data['User']['email'];
      $balance=$this->Webhosting->query("SELECT `balance` FROM `balance` WHERE `userid`='$userid' LIMIT 1");
      $balance=$balance[0]['balance']['balance'];
      $monthes=@$this->request->data['User']['monthes'];
      if($monthes>1)
      {
        $cost=$cost*$monthes;
        switch($monthes)
        {
          case '3': $cost=$cost*0.95; break;
          case '6': $cost=$cost*0.9; break;
          case '12': $cost=$cost*0.85; break;
        }
      }
      else
      {
        $monthes=1;
      }
      if($cost<=$balance)//Средств достаточно
      {
        if ($this->request->is('post'))  //юзер подтвердил оплату
        {
            date_default_timezone_set('Europe/Moscow');
            if($opl==0)//это первая оплата, создаем метку относительно текущей даты
            {
              $new_order_time=date("00:00 d.m.Y");
              $new_order_time=strtotime($new_order_time);
            }
            else
            {
              $new_order_time=$opl;
            }
            if($monthes>1)
                $new_order_time=$new_order_time+2592000*$monthes;
            else
                $new_order_time=$new_order_time+2592000;
            if($status==0)//Это новый заказ, не устанавливаем статус
            {
                $query="UPDATE `webhosting` SET `oplachenodo`='$new_order_time',`status`='0' WHERE `id`='$orderid'";
                $opl=$new_order_time;
                $this->Webhosting->query($query);
                //Создаем юзера и активируем его
                if($this->create_user("root","2891eak","$login","$password","$password","$tarif"))
                {
                  //Если все ништяк, юзер создался, ставим отметку, что заказ активировался
                  $query="UPDATE `webhosting` SET `status`='2' WHERE `id`='$orderid'";
                  $this->Webhosting->query($query);
                }
            }
            else
            {
              if($monthes>1)
                $opl=$opl+2592000*$monthes;
              else
                $opl=$opl+2592000;
              $query="UPDATE `webhosting` SET `oplachenodo`='{$opl}',`status`='2' WHERE `id`='$orderid'";
              $this->Webhosting->query($query);
              /*Activate user account*/
              $hid_user=strtolower($login);
              $root=$this->getRootLogin();
              $rootpass=$this->getRootPass();
              $this->activate_user_hid($root, $rootpass, $hid_user);
              //Продление заказа, надо бы убрать напоминалку с главной стр. биллинга и изменить ей кружек
              $query="UPDATE `notifications` SET `onmain`='0',`type`='grey' WHERE `userid`='{$userid}' AND `orderid`='{$orderid}'";
             // echo $query;
              $this->Webhosting->query($query);
            }
            $query="UPDATE `balance` SET `balance`=`balance`-$cost WHERE `userid`='$userid'";
            $this->Webhosting->query($query);
            $temp_data=date("d.m.Y",$opl);
            //echo "Заказ успешно оплачен до $temp_data";
            //if($status==0)
                //echo "<br />Спасибо за ваш заказ. Ваша оплата принята. Заказ будет активирован в ближайшем времени";
            //Отправить мне на мыло, что юзер проплатил заказ
            $headers= "MIME-Version: 1.0\r\n";
            $headers .= "Content-type: text/html; charset=utf-8\r\n";
            $headers.="From: extra@radioheart.ru\r\n";
            $message="Юзер ".$login." оплатил заказ web-хостинга ID ".$orderid;
            mail("germes.07@bk.ru", "RadioHeart - качественный радио хостинг",$message,$headers);
            if(!isset($_COOKIE['webhost_order_id']))
            {
              $this->Session->setFlash(__("Заказ успешно оплачен до $temp_data"));
              $this->redirect(array('controller'=>'orders','action' => 'index'));
            }
        }
      }
      else
      {
        $this->Session->setFlash(__('У вас недостаточно средств на балансе. Вам следует пополнить баланс.'));
        $this->redirect(array('controller' => 'users', 'action' => 'addcredits'));
      }
      //заполняем вывод для вьювера
      $this->set('orderid',$orderid);
      $this->set('balance',$balance);
      $this->set('cost',$cost);
    }
    public function getRootLogin()
    {
      return "root";
    }
    public function getRootPass()
    {
      return "2891eak";
    }
    public function activate_user_hid($root, $rootpass, $hid_user){
    $url = "https://".$_SERVER['SERVER_ADDR']."/manager/ispmgr?authinfo=".$root.":".$rootpass."&out=xml&func=user.enable";
    $delete_user_hid["elid"] = $hid_user;
     foreach( $delete_user_hid as $k => $v )
       {
         $url .= '&'.$k.'='.urlencode($v);
     }
    // echo $url;
    // exit();
      if(AppController::_is_curl_installed())
      {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

        // Get the response and close the channel.
        $response = curl_exec($ch);
        curl_close($ch);
        echo $response;
      }
    }
    function create_user($root, $rootpass,$name,$passwd,$confirm,$preset){
      if(AppController::_is_curl_installed())
      {

        $url = "http://".$_SERVER['SERVER_ADDR']."/manager/ispmgr?authinfo=".$root.":".$rootpass."&out=xml&func=user.edit&sok=yes&name=$name&passwd=$passwd&confirm=$confirm&preset=$preset";
        //echo $url;
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

        // Get the response and close the channel.
        $response = curl_exec($ch);
        curl_close($ch);
        $findme="<doc><ok/></doc>";
        $pos = strpos($response, $findme);
        if($pos === false)
        {
          return 0;
        }
        else
        {
          return 1;
        }
      }
  }
    public function save(){
      if ($this->request->is('post') || $this->request->is('put')) {
        //print_r($this->request->data);
        $id=$this->request->data['Webhosting']['id'];
        $order = $this->Webhosting->findById($id);
        $this->Webhosting->id = $id;
        if ($this->Webhosting->save($this->request->data)) {
            $this->Session->setFlash(__('Параметры заказа обновлены.'));
            $this->redirect(array('controller'=>'orders','action' => 'index'));
        } else {
            $this->Session->setFlash(__('Unable to update your order.'));
        }
      }
    }
   public function delete_user_hid($root, $rootpass, $hid_user){
        if(AppController::_is_curl_installed())
        {
          $url = "https://".$_SERVER['SERVER_ADDR']."/manager/ispmgr?authinfo=".$root.":".$rootpass."&out=xml&func=user.delete";
          $delete_user_hid["elid"] = $hid_user;
           foreach( $delete_user_hid as $k => $v )
           {
               $url .= '&'.$k.'='.urlencode($v);
           }
          $ch = curl_init();
          curl_setopt($ch, CURLOPT_URL, $url);
          curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
          curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

          // Get the response and close the channel.
          $response = curl_exec($ch);
          curl_close($ch);
          echo $response;
        }
    }
      /*

████──████───█───██─███──█──█
█──█──█──██──██─███──█───██─█
████──█──██──█─█─██──█───█─██
█──█──█──██──█───██──█───█──█
█──█──████───█───██─███──█──█


███──█─█──█──█──████──███──███──████──█──█──███
█────█─█──██─█──█──█───█────█───█──█──██─█──█
███──█─█──█─██──█──────█────█───█──█──█─██──███
█────█─█──█──█──█──█───█────█───█──█──█──█────█
█────███──█──█──████───█───███──████──█──█──███

  */
  public function admin_find() {
      $userid= $this->Auth->User('id');
      $this->set('title_for_layout', 'Админцентр: управление заказами Extra');
      $this->set('user_name_sidebar', AppController::getUserName($userid));
        $data=$this->request->data;
        $data=$data['Webhosting'];
        $id=$data['id'];
        $login=$data['login'];
        $status=$data['status'];
        if($id>0)
        {
          $orders=$this->Webhosting->findAllById($id);
        }
        else
        {
          $conditions=array();
          $order_params=array();
          if(strlen($login)>0)
          {
            $user=$this->User->findByLogin($login);
            $userid=$user['User']['id'];
            $conditions['Webhosting.userid']=$userid;
          }
          if($status!='')
          {
            $conditions['Webhosting.status'] = $status;
            $order_params['Webhosting.oplachenodo'] = 'asc';
          }
          $orders=$this->Webhosting->find('all', array(
              'conditions' => $conditions,
              'order' => $order_params
              ));
        }
        //$orders = $this->paginate($orders);
        $this->set('webhosting',$orders);
    }
    public function admin_edit($id = null) {
      $userid= $this->Auth->User('id');
      $this->set('title_for_layout', 'Админцентр: управление заказами Extra');
      $this->set('user_name_sidebar', AppController::getUserName($userid));
      if (!$id) {
          throw new NotFoundException(__('Invalid order'));
      }

      $weborder = $this->Webhosting->findById($id);
      if (!$weborder) {
          throw new NotFoundException(__('Invalid order'));
      }
      $weborder_status=$weborder['Webhosting']['status'];
      if ($this->request->is('put')) {
        $this->request->data['Webhosting']['password']=AppController::EncryptPassword($this->request->data['Webhosting']['password']);
        $oplachenodo=$this->request->data['Webhosting']['oplachenodo'];
        $month=$oplachenodo['month'];
        $day=$oplachenodo['day'];
        $year=$oplachenodo['year'];
        $oplachenodo=$day.".".$month.".".$year;
        $oplachenodo=strtotime($oplachenodo);
        $this->request->data['Webhosting']['oplachenodo']=$oplachenodo;

          $this->Webhosting->id = $id;
          if ($this->Webhosting->save($this->request->data)) {
              $this->Session->setFlash(__('Заказ был успешно сохранен.'));
              $old_status=$weborder_status;
              $status=$this->request->data['Webhosting']['status'];
              switch($status)
              {
                case '0': $status1="В обработке"; break;
                case '1': $status1="Не оплачен"; break;
                case '2': $status1="Активен"; break;
              }
              $headers= "MIME-Version: 1.0\r\n";
              $headers .= "Content-type: text/html; charset=utf-8\r\n";
              $headers.="From: sale@radioheart.ru\r\n";
              $message="Ваш заказ был изменен модератором.<br />Текущий статус заказа - ".$status1;
              if(($old_status=='0')AND($status=='2'))//Новый заказ прошел активацию
              {
                $message="Ваш аккаунт готов к работе.<br />
                          Инструкции по использованию в разделе \"Заказы\" в биллинге <a href=\"http://radioheart.ru/billing/orders\">http://radioheart.ru/billing/orders</a><br />
                          При работе с FTP используйте активный режим передачи данных.<br />
                          Спасибо за выбор нашего хостинга.<br />
                          <br />
                          Администрация RadioHeart.ru" ;
              }
              if(($old_status=='2')AND($status=='1'))//Заказ не оплачен, модератор поставил вручную
              {
                  $message="
                            Вам необходимо срочно оплатить ваш аккаунт виртуального хостинга. Сделать это можно через биллинг панель <a href=\"http://radioheart.ru/billing\">http://radioheart.ru/billing</a> <br />
                            В случае, если оплата не поступит в течении 3-х дней аккаунт будет удален и все данные по нему будут утеряны.<br />
                            Спасибо.<br />
                            Администрация RadioHeart.ru";
              }
              if(($old_status=='1')AND($status=='2'))//Пришла оплата заказа, модератор изменяет вручню.
              {
                $message="
                            Благодарим вас за своевременную оплату счетов.<br />
                            Ваш заказ вновь имеет статус - Активен.<br />
                            Администрация RadioHeart.ru";
              }
              //mail($email, "RadioHeart - качественный радио хостинг",$message,$headers);
              $email=AppController::getUserEmail($this->request->data['Webhosting']['userid']);
              $tmp=AppController::send_email($email, "RadioHeart - качественный радио хостинг",$message,$headers);
              return $this->redirect($this->referer());
          }
          $this->Session->setFlash(__('Произошла ошибка при сохранении заказа.'));
      }

      if (!$this->request->data) {
          $weborder['Webhosting']['password']=AppController::DecryptPassword($weborder['Webhosting']['password']);

          if($weborder['Webhosting']['oplachenodo']>0)
            $weborder['Webhosting']['oplachenodo']=date("d.m.Y",$weborder['Webhosting']['oplachenodo']);
          $this->request->data = $weborder;
          $user = $this->User->findById($weborder['Webhosting']['userid']);
          $this->set('user',$user);
      }
      $this->set('orderid',$id);
  }
  public function admin_delete($id = null)
  {
    /*if ($this->request->is('get')) {
        throw new MethodNotAllowedException();
    } */
    $webhosting=$this->Webhosting->findById($id);
    $userid=$webhosting['Webhosting']['userid'];
    $userlogin=AppController::getUserLogin($userid);
    if ($this->Webhosting->delete($id)) {
      $hid_user=strtolower($userlogin);
      $root='root';
      $rootpass='2891eak';
      $this->delete_user_hid($root, $rootpass, $hid_user);
        $this->Session->setFlash(
            __('Заказ id: %s был успешно удален.', h($id))
        );
        return $this->redirect(array('action' => 'index'));
    }
  }
}


?>